package kz.pompei.OneGwt.client.personrole.impl;

import kz.pompei.OneGwt.client.personrole.PersonroleManagerView;

import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Widget;

/**
 * Вьюшка "Управления пользователями и назначение ролей"
 * 
 * @author pompei
 */
public class PersonroleManagerViewImpl implements PersonroleManagerView {
  
  private Widget personListContainerUI;
  
  private Widget sourceWidget = null;
  
  private Widget roleListContainerUI;
  
  /**
   * <p>
   * Предоставляет доступ к контэйнеру пользовательского интерфейса
   * </p>
   * 
   * <p>
   * При вызове этого метода будет формироваться интерфейс. Притом при
   * послеующем вызове будет возвращаться ранее созданный
   * </p>
   * 
   * <p>
   * Если этот метод не вызвать, то интерфейс создаваться не будет - это нужно
   * чтобы не создавать лишние ресурсы, вдруг к этой вьюшке пользователь не
   * обратиться
   * </p>
   * 
   * @return контэйнер, содержащий в себе интерфейс. Этот объект ещё не привязан
   *         к DOM-у браузера - это должен сделать вызывающая сторона
   */
  public Widget getContainerUI() {
    if (sourceWidget == null) sourceWidget = createContainerUI();
    return sourceWidget;
  }
  
  public void setPersonListContainerUI(Widget personListContainerUI) {
    this.personListContainerUI = personListContainerUI;
  }
  
  public void setRoleListContainerUI(Widget roleListContainerUI) {
    this.roleListContainerUI = roleListContainerUI;
  }
  
  private Widget createContainerUI() {
    if (personListContainerUI == null) {
      throw new IllegalStateException( "Без вьюшки 'Список пользователей'"
          + " данная вьюшка существовать не может" );
    }
    if (roleListContainerUI == null) {
      throw new IllegalStateException( "Без вьюшки 'Список ролей'"
          + " данная вьюшка существовать не может" );
    }
    
    HorizontalPanel wall = new HorizontalPanel();
    {
      wall.add( personListContainerUI );
      wall.setCellWidth( personListContainerUI, "50%" );
    }
    {
      wall.add( roleListContainerUI );
      wall.setCellWidth( roleListContainerUI, "1000px" );
    }
    return wall;
  }
  
}
